// //基地址
const baseURL = import.meta.env.VITE_ADMIN_PROXY_PATH;
// 创建请求前拦截器
const httpInterceptor = {
  // 拦截前触发
  invoke(options: UniApp.RequestOptions) {
    // 1. 非http开头的需要拼接基地址
    if (!options.url.startsWith("http")) {
      options.url = baseURL + options.url;
    }
    // 2. 设置请求延迟时间
    options.timeout = 10000;
    // 3. 设置请求头
    options.header = options.header || {};
    // 添加content-type
    options.header["content-type"] = "application/json";
  },
};
//request请求
uni.addInterceptor("request", httpInterceptor);
//文件上传
uni.addInterceptor("uploadFile", httpInterceptor);
//返回Promise对象
export const axios = (options: any) => {
  return new Promise((resove, reject) => {
    // 确保data是JSON字符串
    if (options.data && typeof options.data === "object") {
      options.data = JSON.stringify(options.data);
    }

    uni.request({
      ...options,
      // 1. 成功请求处理
      success(res: any) {
        // 1.2 成功状态码接收数据
        if (res.statusCode >= 200 && res.statusCode < 300) {
          // 成功回调
          if (res.data.code === 200 || res.data.code === 500) {
            resove(res.data);
          }
          // 失败回调
          if (res.data.code === 1) {
            uni.showToast({
              title: res.data.msg,
              icon: "error",
            });
            reject(res);
          }
        } else if (res.statusCode === 401) {
          // 1.2身份认证失败
          uni.showToast({
            title: "请重新登录",
            icon: "error",
          });

          setTimeout(() => {
            uni.redirectTo({
              url: `/pages/login/index`,
            });
          }, 1000);
          reject(res);
        } else {
          // 1.3其他错误
          uni.showToast({
            title: "其他错误",
            icon: "error",
          });
          reject(res);
        }
      },
      // 2.失败处理
      fail(err: any) {
        // 判断网络异常！
        if (err.errMsg === "request:fail") {
          uni.showToast({
            title: "网络异常!",
            icon: "error",
          });
        } else {
          uni.showToast({
            title: err.msg,
            icon: "error",
          });
        }
        reject(err);
      },
    });
  });
};
